package com.zrrd.mybatis_02.getSql;

import com.zrrd.mybatis_02.entity.Student;
import org.apache.ibatis.jdbc.SQL;

/**
 * @author WanJl
 * @version 1.0
 * @title StudentSQL
 * @description
 * @create 2024/10/18
 */
public class StudentSQL {
    /**
     * 返回查询学生的SQL语句
     * @return
     */
/*    public String getSelectAll(){
        SQL sql = new SQL();
        sql.SELECT("*");
        sql.FROM("student");
        return sql.toString();
    }*/
    // 匿名内部类  创建一个类或接口的子类并创建其对象。
    public String getSelectAll(){
        return new SQL(){
            {//局部，可以调用方法和属性
                //调用基于SQL类创建的匿名内部类的对象的父类(SQL类)的方法
                SELECT("*");
                FROM("student");
            }
        }.toString();
    }

    public String getSelectByCondition(Student student){
        return new SQL(){
            {//局部，可以调用方法和属性
                //调用基于SQL类创建的匿名内部类的对象的父类(SQL类)的方法
                SELECT("*");
                FROM("student");
                //如果学生姓名不为空，说明是以学生姓名为条件进行查询
                if(student.getStudentName()!=null){
                    WHERE("student.studentName = #{student.studentName}");
                }
                //如果年龄不为空，说明是以年龄为条件查询
                if (student.getStudentAge()!=null){
                    //如果姓名也不为空，说明以姓名和年龄同时为条件查询
                    if (student.getStudentName()!=null){
                        AND();
                    }
                    WHERE("student.studentAge = #{student.studentAge}");
                }
            }
        }.toString();
    }


    public String getInsert(){
        return new SQL(){
            {//代码块，代码块在编译时，会和构造方法合并到一起执行。
                INSERT_INTO("student");
                INTO_VALUES("#{id},#{studentName},#{studentAge},#{cid}");
            }
        }.toString();
    }
    public String getUpdate(){
        return new SQL(){
            {//代码块，代码块在编译时，会和构造方法合并到一起执行。
                UPDATE("student");
                SET("name=#{studentName},age=#{studentAge},cid=#{cid}");
                WHERE("id = #{id}");
            }
        }.toString();
    }


    public String getDelete(){
        return new SQL(){
            {//代码块，代码块在编译时，会和构造方法合并到一起执行。
                DELETE_FROM("student");
                WHERE("id = #{id}");
            }
        }.toString();
    }

/*
    public static void main(String[] args) {
        //String selectAll = new StudentSQL().getSelectAll();
        //System.out.println(selectAll);


        //创建某个类或接口的匿名内部类
        //多态

        //创建的是Stduent这个类的对象
        new Student() ;
        //父类的引用指向子类的对象
        //-父类的引用变量--/ = /-子类的对象-/
        new Student(){//创建的是Student这个类的子类的对象
            @Override
            public void setStudentName(String studentName) {

                super.setStudentName(studentName);
            }
        };
        //子类可以调用父类非private和default修饰的方法，但是父类是没法调用子类中父类不存在的方法的。


    }


*/


}








